1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
|
<script setup lang="ts">
import { useSessionStore } from '@/stores/session';
import { computed, ref } from 'vue';
import type EditorQuestModalYaml from '~/components/editor/quest/modal/EditorQuestModalYaml.vue';
definePageMeta({
layout: 'editor'
})
const sessionStore = useSessionStore();
const route = useRoute();
const questId = route.params.id as string;
const quest = sessionStore.getQuestById(questId);
const categoryFromSelectedQuest = computed(() => {
const quest = sessionStore.getQuestById(questId);
if (quest) {
return sessionStore.getCategoryById(quest.options.category) || null;
} else {
return null;
}
});
const yamlModal = ref<InstanceType<typeof EditorQuestModalYaml> | null>(null);
const showDeleteModal = ref(false);
const showRenameModal = ref(false);
const showDuplicateModal = ref(false);
const renameQuest = (oldId: string, newId: string) => {
sessionStore.changeQuestId(oldId, newId);
navigateToEditorPane('quest', newId);
showRenameModal.value = false;
};
const deleteQuest = (questId: string) => {
sessionStore.deleteQuest(questId);
navigateToEditorPane(null);
showDeleteModal.value = false;
};
const duplicateQuest = (oldId: string, newId: string) => {
sessionStore.duplicateQuest(oldId, newId);
navigateToEditorPane('quest', newId);
showDuplicateModal.value = false;
};
const showYaml = () => {
yamlModal.value?.open();
}
</script>
<template>
<PageHeader>
<span id="path">
<template v-if="categoryFromSelectedQuest">
<font-awesome-icon class="icon" :icon="['fas', 'fa-folder']" />
{{ stripColorCodes(categoryFromSelectedQuest?.display.name) }}
<font-awesome-icon class="chevron" :icon="['fas', 'fa-chevron-right']" />
</template>
<font-awesome-icon class="icon" :icon="['far', 'fa-compass']" />
<span class="title" v-if="quest">{{ stripColorCodes(quest.display.name) }} </span>
<code>({{ questId }})</code>
</span>
<span id="controls" class="control-group">
<Button :icon="['fas', 'fa-code']" :label="'YAML'" @click="showYaml"></Button>
<Button :icon="['fas', 'fa-copy']" :label="'Duplicate'" @click="showDuplicateModal = true"></Button>
<Button :icon="['fas', 'fa-pen']" :label="'Rename'" @click="showRenameModal = true"></Button>
<Button :icon="['fas', 'fa-trash']" :label="'Delete'" @click="showDeleteModal = true"></Button>
<Button type="solid" :disabled="true" :icon="['fas', 'fa-save']" :label="'Save'"></Button>
</span>
</PageHeader>
<div id="options-container">
<EditorQuestOptionsPanel :questId="questId" />
<EditorQuestTasksOptionsPanel :questId="questId" />
</div>
<EditorQuestModalYaml ref="yamlModal" :key="`yaml-quest-${questId}`" :questId="questId" />
<EditorQuestModalDelete v-model="showDeleteModal" :key="`delete-quest-${questId}`" :questId="questId"
@delete="() => questId && deleteQuest(questId)" />
<EditorQuestModalRename v-model="showRenameModal" :key="`rename-quest-${questId}`" :questId="questId"
@update="(newId: any) => questId && renameQuest(questId, newId)" />
<EditorQuestModalDuplicate v-model="showDuplicateModal" :key="`duplicate-quest-${questId}`" :questId="questId"
@duplicate="(newId: any) => questId && duplicateQuest(questId, newId)" />
</template>
<style scoped>
#pane-container {
width: 100%;
flex-grow: 1;
height: calc(100vh - 73px);
max-height: calc(100vh - 73px);
}
#options-container {
width: 100%;
display: flex;
gap: 1rem;
padding: 1rem;
overflow: auto;
max-height: calc(100% - 55px);
}
header {
border-bottom: 1px solid var(--color-border);
}
</style>
|